package com.alimentamais.app.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.alimentamais.app.dominio.Usuario;


public class UsuarioDao implements IUsuarioDao{
	
	
	private static final String SQL_INSERT=
	  "INSERT INTO usuario(Nome, Senha, Idade, Peso, Altura, Sexo, Ativfisica, Calorias)values(?,?,?,?,?,?,?,?)";
	
	private static final String SQL_UPDATE=
	  "UPDATE usuario SET Nome=?, Senha=?, Idade=?, Peso=?, Altura=?, Sexo=?, AtivFisica=?, Calorias=? WHERE IdUsuario=? ";
	
	private static final String SQL_REMOVE=
	  "DELETE FROM usuario WHERE IdUsuario=?";
	
	private static final String SQL_PESQUISA=
	  "SELECT * FROM usuario";
			

	@Override
	public int cadastrar(Usuario usuario) {
		Boolean localizado=false; 
		Connection con= DBConexao.getConnection();
	    PreparedStatement stm = null;
	     
		try {
			 stm = con.prepareStatement(SQL_PESQUISA);
			 ResultSet rs;
			 rs = stm.executeQuery();
			 while(rs.next()){
		        
        		if(rs.getString("nome").equals(usuario.getNome())){
        			if(rs.getString("senha").equals(usuario.getSenha())){
        				
        				localizado=true;
        				break;
        		    
        			}
        			
        		}
			}
			if(localizado==false){
        			
        			 int result=0;
        			 PreparedStatement stm1 = null;
        	         try{
        	             stm1 = con.prepareStatement(SQL_INSERT);
        	             stm1.setString(1, usuario.getNome());
        	             stm1.setString(2, usuario.getSenha());
        	             stm1.setInt(3, usuario.getIdade());
        	             stm1.setDouble(4, usuario.getPeso());
        	             stm1.setDouble(5, usuario.getAltura());
        	             stm1.setString(6, usuario.getSexo());
        	             stm1.setString(7, usuario.getAtividade());
        	             stm1.setString(8,usuario.getCalorias());
        	             
        	             result=stm1.executeUpdate();
        	             
        	         }catch(SQLException e){
        	        	 try{
        	        		 if(con!=null){
        	        			
        	        			 con.rollback();
        	        		 }
        	        	 }catch(SQLException e1){
        	        		 
        	        		 e1.printStackTrace();
        	        	 }finally{
        	        		 DBConexao.close(con, stm, null);
        	        	 }
        	        	 e.printStackTrace();
        	         }
        	         return result;    
			}		
			
		} catch (SQLException e2) {
			
			e2.printStackTrace();
		}finally{
   		    DBConexao.close(con, stm, null);
   	    }
		return 0;
	       	
	}

	@Override
	public int alterar(Usuario usuario) {
		
		 Connection con= DBConexao.getConnection();
         PreparedStatement stm=null;
         int result=0;
             
         try{
             stm = con.prepareStatement(SQL_UPDATE);
             stm.setString(1, usuario.getNome());
             stm.setString(2, usuario.getSenha());
             stm.setInt(3, usuario.getIdade());
             stm.setDouble(4, usuario.getPeso());
             stm.setDouble(5, usuario.getAltura());
             stm.setString(6, usuario.getSexo());
             stm.setString(7, usuario.getAtividade());
             stm.setString(8, usuario.getCalorias());
             stm.setInt(9, usuario.getCodigo());
            
             
             result=stm.executeUpdate();
             
         }catch(SQLException e){
        	 try{
        		 if(con!=null){
        			 con.rollback();
        		 }
        	 }catch(SQLException e1){
        		 
        		 e1.printStackTrace();
        	 }finally{
        		 DBConexao.close(con, stm, null);
        	 }
        	 e.printStackTrace();
         }
		
		return result;
	}

	@Override
	public int excluir(int IdUsuario) {
		
		 Connection con= DBConexao.getConnection();
         PreparedStatement stm=null;
         int result=0;
             
         try{
             stm = con.prepareStatement(SQL_REMOVE);
             stm.setInt(1, IdUsuario);
             
             result=stm.executeUpdate();
             
         }catch(SQLException e){
        	 try{
        		 if(con!=null){
        			 con.rollback();
        		 }
        	 }catch(SQLException e1){
        		 
        		 e1.printStackTrace();
        	 }finally{
        		 DBConexao.close(con, stm, null);
        	 }
        	 e.printStackTrace();
         }
		
		return result;
	}
	
	@Override
	public List<Usuario> pesquisarTodos() {
		
		 Connection con= DBConexao.getConnection();
         PreparedStatement stm=null;
         ResultSet rs=null;
         List<Usuario>usuarios=new ArrayList<Usuario>();
         
         try{
             stm = con.prepareStatement(SQL_PESQUISA);
             rs=stm.executeQuery();
             
             while(rs.next()){

                Usuario usuario=new Usuario();
                
 				usuario.setCodigo(rs.getInt("IdUsuario"));
 				usuario.setNome(rs.getString("Nome"));
 				usuario.setSenha(rs.getString("Senha"));
 				usuario.setIdade(rs.getInt("Idade"));
 				usuario.setPeso(rs.getDouble("Peso"));
 				usuario.setAltura(rs.getDouble("Altura"));
 				usuario.setSexo(rs.getString("Sexo"));
 				usuario.setAtividade(rs.getString("Ativfisica"));
 				usuario.setData(rs.getTimestamp( "data" ));
 				
 				usuarios.add(usuario);
 				
             }
             
         }catch(SQLException e){
        	 try{
        		 if(con!=null){
        			 con.rollback();
        		 }
        	 }catch(SQLException e1){
        		 
        		 e1.printStackTrace();
        	 }finally{
        		 DBConexao.close(con, stm, rs);
        	 }
        	 e.printStackTrace();
         }
		
		return usuarios;
	}

	@Override
	public int login(Usuario usuario) {
		
		int localizado=0; 
		Connection con= DBConexao.getConnection();
	    PreparedStatement stm = null;
	     
		try {
			 stm = con.prepareStatement(SQL_PESQUISA);
			 ResultSet rs;
			 rs = stm.executeQuery();
			 while(rs.next()){
		        
        		if(rs.getString("nome").equals(usuario.getNome())){
        			if(rs.getString("senha").equals(usuario.getSenha())){
        				
        				localizado=rs.getInt("Calorias");
        				break;
        		    
        			}
        			
        		}
			}
		 }catch(SQLException e){
        	 try{
        		 if(con!=null){
        			 con.rollback();
        		 }
        	 }catch(SQLException e1){
        		 
        		 e1.printStackTrace();
        	 }finally{
        		 DBConexao.close(con, stm, null);
        	 }
        	 e.printStackTrace();
         }
		 return localizado;
	}
	
	

	@Override
	public List<Usuario> pesquisarUm(Usuario usuario) {
		
		 Connection con= DBConexao.getConnection();
         PreparedStatement stm=null;
         ResultSet rs=null;
         List<Usuario>usuarios=new ArrayList<Usuario>();
         
         try{
             stm = con.prepareStatement(SQL_PESQUISA);
             rs=stm.executeQuery();
             
             while(rs.next()){
            	 
            	 if(rs.getString("nome").equals(usuario.getNome())){
         			if(rs.getString("senha").equals(usuario.getSenha())){ 
                
         				  usuario=new Usuario();
         				  
 				          usuario.setCodigo(rs.getInt("IdUsuario"));
 				          usuario.setNome(rs.getString("Nome"));
 				          usuario.setSenha(rs.getString("Senha"));
 				          usuario.setIdade(rs.getInt("Idade"));
 				          usuario.setPeso(rs.getDouble("Peso"));
 				          usuario.setAltura(rs.getDouble("Altura"));
 				          usuario.setSexo(rs.getString("Sexo"));
 				          usuario.setAtividade(rs.getString("Ativfisica"));
 				          usuario.setData(rs.getTimestamp( "data" ));
 				
 				          usuarios.add(usuario);
 				          break;
         			}
            	 }		
             }
             
         }catch(SQLException e){
        	 try{
        		 if(con!=null){
        			 con.rollback();
        		 }
        	 }catch(SQLException e1){
        		 
        		 e1.printStackTrace();
        	 }finally{
        		 DBConexao.close(con, stm, rs);
        	 }
        	 e.printStackTrace();
         }
		
		return usuarios;
	}

}
